  // 1.简单的
// console.log("1.AAAA");
// setTimeout(() => console.log("1.BBBB"), 1000);
// setTimeout(() => console.log("1.CCCC"), 0);

/**
  * 输出：
  * 1.AAAA
  * 1.CCCC
  * 1.BBBB
  */

  // 2.进阶的
// console.log("2.AAAA");
// setTimeout(() => console.log("2.BBBB"), 1000);
// const start = new Date();
// while (new Date() - start < 3000) {}
// console.log("2.CCCC");
// setTimeout(() => console.log("2.DDDD"), 0);

/**
  * 输出：
  * 2.AAAA
  * 2.CCCC
  * 2.BBBB
  * 2.DDDD
  * 
  * ---->>>>
  * 2.BBBB 1秒后输出，下面代码3秒后执行，所以已经过了，所以2.BBBB先执行，2.DDDD后执行
  */

  // 3.最终版的
console.log("AAAA");
setTimeout(() => console.log("BBBB"), 1000);
const start = new Date();
while (new Date() - start < 3000) {}
console.log("CCCC");
setTimeout(() => console.log("DDDD"), 0);
new Promise((resolve, reject) => {
  console.log("EEEE");
  foo.bar(100);
 })
 .then(() => console.log("FFFF"))
 .then(() => console.log("GGGG"))
 .catch(() => console.log("HHHH"));
 console.log("IIII");

 /**
  * 输出：
  * AAAA
  * CCCC
  * EEEE
  * IIII
  * ----->>>>以上是同步任务
  * HHHH
  * ----->>>>以上是异步任务中的微任务
  * BBBB
  * DDDD
  * ----->>>>以上是异步任务中的宏任务
  */


  